{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceType":"datasetVersion","sourceId":8760277,"datasetId":4299235,"databundleVersionId":8915569},{"sourceType":"datasetVersion","sourceId":5960502,"datasetId":3418322,"databundleVersionId":6038183}],"dockerImageVersionId":30664,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\nimport os","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2024-06-23T02:30:43.297860Z","iopub.execute_input":"2024-06-23T02:30:43.298261Z","iopub.status.idle":"2024-06-23T02:30:43.303149Z","shell.execute_reply.started":"2024-06-23T02:30:43.298230Z","shell.execute_reply":"2024-06-23T02:30:43.302019Z"},"trusted":true},"execution_count":16,"outputs":[]},{"cell_type":"code","source":"import scipy \nimport nltk\nimport sklearn\nimport keras\nprint('The nltk version is {}.'.format(nltk.__version__))\nprint('The scikit-learn version is {}.'.format(sklearn.__version__))\nprint('The scipy version is {}.'.format(scipy.__version__))\nprint('The keras version is {}.'.format(keras.__version__))\n","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:30:43.304892Z","iopub.execute_input":"2024-06-23T02:30:43.305240Z","iopub.status.idle":"2024-06-23T02:30:43.315191Z","shell.execute_reply.started":"2024-06-23T02:30:43.305209Z","shell.execute_reply":"2024-06-23T02:30:43.314192Z"},"trusted":true},"execution_count":17,"outputs":[{"name":"stdout","text":"The nltk version is 3.2.4.\nThe scikit-learn version is 1.2.2.\nThe scipy version is 1.12.0.\nThe keras version is 3.0.5.\n","output_type":"stream"}]},{"cell_type":"code","source":"#!pip install scipy==1.5.4","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:30:43.316238Z","iopub.execute_input":"2024-06-23T02:30:43.316499Z","iopub.status.idle":"2024-06-23T02:30:43.323451Z","shell.execute_reply.started":"2024-06-23T02:30:43.316476Z","shell.execute_reply":"2024-06-23T02:30:43.322661Z"},"trusted":true},"execution_count":18,"outputs":[]},{"cell_type":"code","source":"#!pip install imbalanced-learn==0.12.3","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:30:43.325816Z","iopub.execute_input":"2024-06-23T02:30:43.326196Z","iopub.status.idle":"2024-06-23T02:30:43.332654Z","shell.execute_reply.started":"2024-06-23T02:30:43.326163Z","shell.execute_reply":"2024-06-23T02:30:43.331692Z"},"trusted":true},"execution_count":19,"outputs":[]},{"cell_type":"code","source":"from imblearn.over_sampling import BorderlineSMOTE\nfrom imblearn.over_sampling import KMeansSMOTE","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:30:43.333640Z","iopub.execute_input":"2024-06-23T02:30:43.333897Z","iopub.status.idle":"2024-06-23T02:30:43.340779Z","shell.execute_reply.started":"2024-06-23T02:30:43.333868Z","shell.execute_reply":"2024-06-23T02:30:43.339882Z"},"trusted":true},"execution_count":20,"outputs":[]},{"cell_type":"code","source":"#from collections import Counter\n#from catboost import CatBoostClassifier\nfrom sklearn.model_selection import train_test_split\n#from imblearn.over_sampling import SMOTE\nfrom sklearn import metrics\n#from sklearn.feature_selection import VarianceThreshold\nfrom sklearn.datasets import make_classification\nfrom lightgbm import LGBMClassifier\nfrom sklearn.model_selection import cross_val_score\n# xgboost для классификации\n#from xgboost import XGBClassifier\nfrom sklearn.metrics import accuracy_score\nfrom joblib import dump","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:30:43.341839Z","iopub.execute_input":"2024-06-23T02:30:43.342353Z","iopub.status.idle":"2024-06-23T02:30:43.350091Z","shell.execute_reply.started":"2024-06-23T02:30:43.342327Z","shell.execute_reply":"2024-06-23T02:30:43.349177Z"},"trusted":true},"execution_count":21,"outputs":[]},{"cell_type":"code","source":"ecg_df_HTV = pd.read_csv(\"/kaggle/input/electrocardiogram-database-for-arrhythmia-study/ecg_df_rhythm.csv\", index_col=0)","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:30:43.351352Z","iopub.execute_input":"2024-06-23T02:30:43.351614Z","iopub.status.idle":"2024-06-23T02:30:48.504371Z","shell.execute_reply.started":"2024-06-23T02:30:43.351592Z","shell.execute_reply":"2024-06-23T02:30:48.503323Z"},"trusted":true},"execution_count":22,"outputs":[]},{"cell_type":"code","source":"ecg_df_HTV[:3]","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:30:48.505744Z","iopub.execute_input":"2024-06-23T02:30:48.506155Z","iopub.status.idle":"2024-06-23T02:30:48.538014Z","shell.execute_reply.started":"2024-06-23T02:30:48.506120Z","shell.execute_reply":"2024-06-23T02:30:48.537080Z"},"trusted":true},"execution_count":23,"outputs":[{"execution_count":23,"output_type":"execute_result","data":{"text/plain":"   0_Mean RR (ms)  0_STD RR/SDNN (ms)  0_Mean HR (Kubios' style) (beats/min)  \\\n0       -0.153063           -0.561229                              -0.083994   \n1        0.388922           -0.576440                              -0.515920   \n2        0.491271           -0.590281                              -0.586560   \n\n   0_Mean HR (beats/min)  0_STD HR (beats/min)  0_Min HR (beats/min)  \\\n0              -0.126195             -0.530526              0.203470   \n1              -0.547819             -0.558183             -0.254884   \n2              -0.616799             -0.568887             -0.331226   \n\n   0_Max HR (beats/min)  0_RMSSD (ms)    0_NNxx  0_pNNxx (%)  ...  11_Min_P  \\\n0             -0.348168     -0.520452 -0.728876    -0.859674  ...  0.044933   \n1             -0.669709     -0.528545 -1.014266    -1.156689  ...  0.390574   \n2             -0.720878     -0.507999 -0.728876    -0.785421  ...  0.044933   \n\n   11_Max_Q  11_Min_Q  11_Max_S  11_Min_S  11_Max_T  11_Min_T       age  \\\n0 -0.359817 -0.148760 -0.292535 -0.000366  0.039331 -0.326886  0.136332   \n1 -0.464482  0.239995 -0.374881  0.347704 -0.253178 -0.231698  0.136332   \n2 -0.255152  0.239995 -0.292535 -0.000366 -0.019170  0.244242  0.136332   \n\n        sex  rhythm  \n0 -0.666883      SR  \n1 -0.666883      SR  \n2 -0.666883      SR  \n\n[3 rows x 459 columns]","text/html":"<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>0_Mean RR (ms)</th>\n      <th>0_STD RR/SDNN (ms)</th>\n      <th>0_Mean HR (Kubios' style) (beats/min)</th>\n      <th>0_Mean HR (beats/min)</th>\n      <th>0_STD HR (beats/min)</th>\n      <th>0_Min HR (beats/min)</th>\n      <th>0_Max HR (beats/min)</th>\n      <th>0_RMSSD (ms)</th>\n      <th>0_NNxx</th>\n      <th>0_pNNxx (%)</th>\n      <th>...</th>\n      <th>11_Min_P</th>\n      <th>11_Max_Q</th>\n      <th>11_Min_Q</th>\n      <th>11_Max_S</th>\n      <th>11_Min_S</th>\n      <th>11_Max_T</th>\n      <th>11_Min_T</th>\n      <th>age</th>\n      <th>sex</th>\n      <th>rhythm</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>-0.153063</td>\n      <td>-0.561229</td>\n      <td>-0.083994</td>\n      <td>-0.126195</td>\n      <td>-0.530526</td>\n      <td>0.203470</td>\n      <td>-0.348168</td>\n      <td>-0.520452</td>\n      <td>-0.728876</td>\n      <td>-0.859674</td>\n      <td>...</td>\n      <td>0.044933</td>\n      <td>-0.359817</td>\n      <td>-0.148760</td>\n      <td>-0.292535</td>\n      <td>-0.000366</td>\n      <td>0.039331</td>\n      <td>-0.326886</td>\n      <td>0.136332</td>\n      <td>-0.666883</td>\n      <td>SR</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>0.388922</td>\n      <td>-0.576440</td>\n      <td>-0.515920</td>\n      <td>-0.547819</td>\n      <td>-0.558183</td>\n      <td>-0.254884</td>\n      <td>-0.669709</td>\n      <td>-0.528545</td>\n      <td>-1.014266</td>\n      <td>-1.156689</td>\n      <td>...</td>\n      <td>0.390574</td>\n      <td>-0.464482</td>\n      <td>0.239995</td>\n      <td>-0.374881</td>\n      <td>0.347704</td>\n      <td>-0.253178</td>\n      <td>-0.231698</td>\n      <td>0.136332</td>\n      <td>-0.666883</td>\n      <td>SR</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>0.491271</td>\n      <td>-0.590281</td>\n      <td>-0.586560</td>\n      <td>-0.616799</td>\n      <td>-0.568887</td>\n      <td>-0.331226</td>\n      <td>-0.720878</td>\n      <td>-0.507999</td>\n      <td>-0.728876</td>\n      <td>-0.785421</td>\n      <td>...</td>\n      <td>0.044933</td>\n      <td>-0.255152</td>\n      <td>0.239995</td>\n      <td>-0.292535</td>\n      <td>-0.000366</td>\n      <td>-0.019170</td>\n      <td>0.244242</td>\n      <td>0.136332</td>\n      <td>-0.666883</td>\n      <td>SR</td>\n    </tr>\n  </tbody>\n</table>\n<p>3 rows × 459 columns</p>\n</div>"},"metadata":{}}]},{"cell_type":"code","source":"def Entering_missing_values(df,name):\n    df_numeric = ecg_df_HTV.select_dtypes(include=[np.number])\n    numeric_cols = df_numeric.columns.values\n    for i in df[name].value_counts().index:\n        df_1 = df[df[name] == i]\n        for col in numeric_cols:\n            if (np.mean(df_1[col].isnull()) > 0) and (np.mean(df_1[col].isnull()) < 1):\n                df_1[col] = df_1[col].fillna(df_1[col].median())                        \n        df[df[name] == i] = df_1\n    return df","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:30:48.541028Z","iopub.execute_input":"2024-06-23T02:30:48.541332Z","iopub.status.idle":"2024-06-23T02:30:48.549975Z","shell.execute_reply.started":"2024-06-23T02:30:48.541307Z","shell.execute_reply":"2024-06-23T02:30:48.549010Z"},"trusted":true},"execution_count":24,"outputs":[]},{"cell_type":"code","source":"import pandas as pd\npd.options.mode.chained_assignment = None  # default='warn'\necg_df_HTV_sns= ecg_df_HTV.copy()\necg_df_HTV_sns=Entering_missing_values(ecg_df_HTV_sns,\"rhythm\")","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:30:48.551291Z","iopub.execute_input":"2024-06-23T02:30:48.551893Z","iopub.status.idle":"2024-06-23T02:30:49.802054Z","shell.execute_reply.started":"2024-06-23T02:30:48.551861Z","shell.execute_reply":"2024-06-23T02:30:49.801254Z"},"trusted":true},"execution_count":25,"outputs":[]},{"cell_type":"code","source":"ecg_df_HTV_sns.index = pd.RangeIndex(start=0, stop=len(ecg_df_HTV) )","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:30:49.803065Z","iopub.execute_input":"2024-06-23T02:30:49.803340Z","iopub.status.idle":"2024-06-23T02:30:49.808701Z","shell.execute_reply.started":"2024-06-23T02:30:49.803309Z","shell.execute_reply":"2024-06-23T02:30:49.807637Z"},"trusted":true},"execution_count":26,"outputs":[]},{"cell_type":"code","source":"for col in ecg_df_HTV.columns:\n    pct_missing = np.sum(ecg_df_HTV[col].isnull())\n    if round(pct_missing*100) >0:\n        print('{} - {}%'.format(col, round(pct_missing*100)))","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:30:49.809948Z","iopub.execute_input":"2024-06-23T02:30:49.810259Z","iopub.status.idle":"2024-06-23T02:30:49.910897Z","shell.execute_reply.started":"2024-06-23T02:30:49.810236Z","shell.execute_reply":"2024-06-23T02:30:49.910003Z"},"trusted":true},"execution_count":27,"outputs":[]},{"cell_type":"code","source":"ecg_df_HTV_sns= ecg_df_HTV_sns.dropna()\necg_df_HTV_sns[\"rhythm\"],uniques_rhythm = pd.factorize(ecg_df_HTV_sns.rhythm)\n","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:30:49.912157Z","iopub.execute_input":"2024-06-23T02:30:49.912839Z","iopub.status.idle":"2024-06-23T02:30:50.002822Z","shell.execute_reply.started":"2024-06-23T02:30:49.912805Z","shell.execute_reply":"2024-06-23T02:30:50.002092Z"},"trusted":true},"execution_count":28,"outputs":[]},{"cell_type":"code","source":"ecg_df_HTV[\"rhythm\"].value_counts()[:6]","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:30:50.003795Z","iopub.execute_input":"2024-06-23T02:30:50.004068Z","iopub.status.idle":"2024-06-23T02:30:50.018108Z","shell.execute_reply.started":"2024-06-23T02:30:50.004044Z","shell.execute_reply":"2024-06-23T02:30:50.017192Z"},"trusted":true},"execution_count":29,"outputs":[{"execution_count":29,"output_type":"execute_result","data":{"text/plain":"rhythm\nSR       26890\nSBRAD     5419\nAFIB      4418\nSTACH     3577\nSARRH     1136\nAFLT       692\nName: count, dtype: int64"},"metadata":{}}]},{"cell_type":"code","source":"ecg_df_HTV_sns[\"rhythm\"].value_counts()[:6]","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:30:50.019324Z","iopub.execute_input":"2024-06-23T02:30:50.019643Z","iopub.status.idle":"2024-06-23T02:30:50.032086Z","shell.execute_reply.started":"2024-06-23T02:30:50.019611Z","shell.execute_reply":"2024-06-23T02:30:50.031009Z"},"trusted":true},"execution_count":30,"outputs":[{"execution_count":30,"output_type":"execute_result","data":{"text/plain":"rhythm\n0    26890\n4     5419\n1     4418\n2     3577\n3     1136\n5      692\nName: count, dtype: int64"},"metadata":{}}]},{"cell_type":"code","source":"ecg_df_HTV_sns = ecg_df_HTV_sns[ecg_df_HTV_sns[\"rhythm\"] != 6]","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:30:50.033321Z","iopub.execute_input":"2024-06-23T02:30:50.033658Z","iopub.status.idle":"2024-06-23T02:30:50.093846Z","shell.execute_reply.started":"2024-06-23T02:30:50.033625Z","shell.execute_reply":"2024-06-23T02:30:50.093016Z"},"trusted":true},"execution_count":31,"outputs":[]},{"cell_type":"code","source":"ecg_df_HTV_sns_rutm = ecg_df_HTV_sns.copy().dropna()","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:30:50.095036Z","iopub.execute_input":"2024-06-23T02:30:50.095374Z","iopub.status.idle":"2024-06-23T02:30:50.230597Z","shell.execute_reply.started":"2024-06-23T02:30:50.095342Z","shell.execute_reply":"2024-06-23T02:30:50.229762Z"},"trusted":true},"execution_count":32,"outputs":[]},{"cell_type":"code","source":"df_new = ecg_df_HTV_sns_rutm.copy()\n#df_new = df_new[df_new['rhythm'] < 5 ]\ndf_new.rhythm.value_counts()\nn = 5000\ndf_new =ecg_df_HTV_sns_rutm[ecg_df_HTV_sns_rutm.rhythm == 0.0][:n ].copy()\nfor i in [1.0,2.0,3.0,4.0,5.0,6.0]:\n    df_new = pd.concat([df_new, ecg_df_HTV_sns_rutm[ecg_df_HTV_sns_rutm.rhythm == i][:n ]], ignore_index=True)","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:30:50.232077Z","iopub.execute_input":"2024-06-23T02:30:50.232628Z","iopub.status.idle":"2024-06-23T02:30:50.465286Z","shell.execute_reply.started":"2024-06-23T02:30:50.232585Z","shell.execute_reply":"2024-06-23T02:30:50.464456Z"},"trusted":true},"execution_count":33,"outputs":[]},{"cell_type":"code","source":"df_new.rhythm.value_counts()","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:30:50.466579Z","iopub.execute_input":"2024-06-23T02:30:50.466887Z","iopub.status.idle":"2024-06-23T02:30:50.475043Z","shell.execute_reply.started":"2024-06-23T02:30:50.466859Z","shell.execute_reply":"2024-06-23T02:30:50.473986Z"},"trusted":true},"execution_count":34,"outputs":[{"execution_count":34,"output_type":"execute_result","data":{"text/plain":"rhythm\n0    5000\n4    5000\n1    4418\n2    3577\n3    1136\n5     692\nName: count, dtype: int64"},"metadata":{}}]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\n# Круговая диаграмма, секторы которой будут упорядочены и расположены против часовой стрелки:\nlabels = df_new.rhythm.value_counts()[:6].index\nsizes = list(df_new.rhythm.value_counts()[:6])\nfig1, ax1 = plt.subplots()\nax1.pie(sizes, labels=labels, autopct='%1.1f%%')#autopct='%1.1f%%'\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:30:50.476363Z","iopub.execute_input":"2024-06-23T02:30:50.476720Z","iopub.status.idle":"2024-06-23T02:30:50.912947Z","shell.execute_reply.started":"2024-06-23T02:30:50.476693Z","shell.execute_reply":"2024-06-23T02:30:50.911637Z"},"trusted":true},"execution_count":35,"outputs":[{"output_type":"display_data","data":{"text/plain":"<Figure size 640x480 with 1 Axes>","image/png":"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"},"metadata":{}}]},{"cell_type":"markdown","source":"Поиск матрицей corr","metadata":{}},{"cell_type":"code","source":"df_corr_rhythm =df_new.corr(method='spearman')[[\"rhythm\"]] #,\"diagnostic\"","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:30:50.914403Z","iopub.execute_input":"2024-06-23T02:30:50.914891Z","iopub.status.idle":"2024-06-23T02:31:08.577144Z","shell.execute_reply.started":"2024-06-23T02:30:50.914846Z","shell.execute_reply":"2024-06-23T02:31:08.576022Z"},"trusted":true},"execution_count":36,"outputs":[]},{"cell_type":"code","source":"def func_corr_a(name,df_corr_diagnostic,N):\n    param = df_corr_diagnostic[((df_corr_diagnostic[name] > N)|(df_corr_diagnostic[name] < -N))&(df_corr_diagnostic[name] != 1)  ]\n    list_corr_=[]\n    for i in list(param.index):\n        if '_' in i :\n            if (i[i.index('_')+1:] in list_corr_) != True:\n                list_corr_.append(i)\n                list_corr_.append(i[i.index('_')+1:])\n                list_corr_.append(param[name][i])\n            else :\n                if abs(list_corr_[list_corr_.index(i[i.index('_')+1:])+1]) < abs(param[name][i] ):\n                    list_corr_[list_corr_.index(i[i.index('_')+1:])-1] = i   \n                    list_corr_[list_corr_.index(i[i.index('_')+1:])+1] = param[name][i]\n        else : \n            list_corr_.append(i)\n            list_corr_.append(i)\n            list_corr_.append(param[name][i])\n    return list_corr_","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:31:08.579884Z","iopub.execute_input":"2024-06-23T02:31:08.580345Z","iopub.status.idle":"2024-06-23T02:31:08.594222Z","shell.execute_reply.started":"2024-06-23T02:31:08.580292Z","shell.execute_reply":"2024-06-23T02:31:08.593128Z"},"trusted":true},"execution_count":37,"outputs":[]},{"cell_type":"code","source":"list_corr_rhythm=func_corr_a(\"rhythm\",df_corr_rhythm,0.005)\nlist_corr_rhythm[::3]","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:31:08.595865Z","iopub.execute_input":"2024-06-23T02:31:08.596226Z","iopub.status.idle":"2024-06-23T02:31:08.674223Z","shell.execute_reply.started":"2024-06-23T02:31:08.596193Z","shell.execute_reply":"2024-06-23T02:31:08.673141Z"},"trusted":true},"execution_count":38,"outputs":[{"execution_count":38,"output_type":"execute_result","data":{"text/plain":"['11_Mean RR (ms)',\n '5_STD RR/SDNN (ms)',\n \"11_Mean HR (Kubios' style) (beats/min)\",\n '9_Mean HR (beats/min)',\n '6_STD HR (beats/min)',\n '5_Min HR (beats/min)',\n '6_Max HR (beats/min)',\n '5_RMSSD (ms)',\n '3_NNxx',\n '5_pNNxx (%)',\n '9_VLF_Peak (Hz)',\n '11_LF_Peak (Hz)',\n '0_HV_Peak (Hz)',\n '5_VLF_Abs (ms2)',\n '5_LF_Abs (ms2)',\n '5_HV_Abs (ms2)',\n '10_LF_Rel (%)',\n '10_HV_Rel (%)',\n '5_VLF_Log (-)',\n '5_LF_Log (-)',\n '5_HV_Log (-)',\n '10_LF_Norm (-)',\n '10_HV_Norm (-)',\n '10_LF/HF (-)',\n '5_Total Power (ms)',\n '9_Max_R',\n '9_Min_R',\n '5_Max_RR',\n '9_Min_RR',\n '4_Max_P',\n '8_Min_P',\n '6_Max_Q',\n '11_Min_Q',\n '11_Max_S',\n '4_Min_S',\n '11_Max_T',\n '1_Min_T',\n '6_VLF_Rel (%)',\n 'age',\n 'sex']"},"metadata":{}}]},{"cell_type":"code","source":"len(list_corr_rhythm[::3])","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:31:08.682043Z","iopub.execute_input":"2024-06-23T02:31:08.682836Z","iopub.status.idle":"2024-06-23T02:31:08.689706Z","shell.execute_reply.started":"2024-06-23T02:31:08.682799Z","shell.execute_reply":"2024-06-23T02:31:08.688495Z"},"trusted":true},"execution_count":39,"outputs":[{"execution_count":39,"output_type":"execute_result","data":{"text/plain":"40"},"metadata":{}}]},{"cell_type":"code","source":"wew_twe = list_corr_rhythm[::3].copy()[:-2]\nwew = []\nA = \" отведение \"\nfor i in range(len(wew_twe)):\n    wew.append([int(wew_twe[i].split(\"_\")[0])+1,list_corr_rhythm[1::3][i]])\nwew.sort()\nfor i in pd.DataFrame(wew).index:\n    print(pd.DataFrame(wew)[0][i],A,pd.DataFrame(wew)[1][i])","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:31:08.691000Z","iopub.execute_input":"2024-06-23T02:31:08.691358Z","iopub.status.idle":"2024-06-23T02:31:08.721406Z","shell.execute_reply.started":"2024-06-23T02:31:08.691324Z","shell.execute_reply":"2024-06-23T02:31:08.720338Z"},"trusted":true},"execution_count":40,"outputs":[{"name":"stdout","text":"1  отведение  HV_Peak (Hz)\n2  отведение  Min_T\n4  отведение  NNxx\n5  отведение  Max_P\n5  отведение  Min_S\n6  отведение  HV_Abs (ms2)\n6  отведение  HV_Log (-)\n6  отведение  LF_Abs (ms2)\n6  отведение  LF_Log (-)\n6  отведение  Max_RR\n6  отведение  Min HR (beats/min)\n6  отведение  RMSSD (ms)\n6  отведение  STD RR/SDNN (ms)\n6  отведение  Total Power (ms)\n6  отведение  VLF_Abs (ms2)\n6  отведение  VLF_Log (-)\n6  отведение  pNNxx (%)\n7  отведение  Max HR (beats/min)\n7  отведение  Max_Q\n7  отведение  STD HR (beats/min)\n7  отведение  VLF_Rel (%)\n9  отведение  Min_P\n10  отведение  Max_R\n10  отведение  Mean HR (beats/min)\n10  отведение  Min_R\n10  отведение  Min_RR\n10  отведение  VLF_Peak (Hz)\n11  отведение  HV_Norm (-)\n11  отведение  HV_Rel (%)\n11  отведение  LF/HF (-)\n11  отведение  LF_Norm (-)\n11  отведение  LF_Rel (%)\n12  отведение  LF_Peak (Hz)\n12  отведение  Max_S\n12  отведение  Max_T\n12  отведение  Mean HR (Kubios' style) (beats/min)\n12  отведение  Mean RR (ms)\n12  отведение  Min_Q\n","output_type":"stream"}]},{"cell_type":"markdown","source":"male 0, female 1","metadata":{}},{"cell_type":"code","source":"def stardant(X_columns):\n    #определяем смещение Центрируем данные относительно 0\n    fix_displacement_min = X_columns.describe()\n    for i in X_columns.describe().columns:   \n        X_columns[i] = X_columns[i] - fix_displacement_min[i][\"min\"]\n    fix_displacement = X_columns.describe()\n    #Стандартизация по z-оценке\n    for i in X_columns.describe().columns:   \n        X_columns[i] = (X_columns[i] - fix_displacement[i][\"mean\"])/(fix_displacement[i][\"std\"])\n    return X_columns ,fix_displacement_min,fix_displacement#","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:31:08.722702Z","iopub.execute_input":"2024-06-23T02:31:08.723508Z","iopub.status.idle":"2024-06-23T02:31:08.731184Z","shell.execute_reply.started":"2024-06-23T02:31:08.723474Z","shell.execute_reply":"2024-06-23T02:31:08.730014Z"},"trusted":true},"execution_count":41,"outputs":[]},{"cell_type":"code","source":"def stardant_N(X_columns,fix_displacement_min, fix_displacement):\n    for i in X_rhythm.describe().columns:   \n        X_columns[i] = X_columns[i] - fix_displacement_min[i][\"min\"]\n    for i in X_rhythm.describe().columns:   \n        X_columns[i] = (X_columns[i] - fix_displacement[i][\"mean\"])/(fix_displacement[i][\"std\"])\n    return X_columns ","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:31:08.732658Z","iopub.execute_input":"2024-06-23T02:31:08.733502Z","iopub.status.idle":"2024-06-23T02:31:08.740711Z","shell.execute_reply.started":"2024-06-23T02:31:08.733469Z","shell.execute_reply":"2024-06-23T02:31:08.739779Z"},"trusted":true},"execution_count":42,"outputs":[]},{"cell_type":"code","source":"#ecg_df_HTV_new[list_corr_rhythm[::3]],fix_displacement_min,fix_displacement = stardant(ecg_df_HTV_new[list_corr_rhythm[::3]])","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:31:08.742498Z","iopub.execute_input":"2024-06-23T02:31:08.742769Z","iopub.status.idle":"2024-06-23T02:31:08.748212Z","shell.execute_reply.started":"2024-06-23T02:31:08.742745Z","shell.execute_reply":"2024-06-23T02:31:08.747150Z"},"trusted":true},"execution_count":43,"outputs":[]},{"cell_type":"code","source":"ecg_df_HTV_sns_rutm[list_corr_rhythm[::3]].describe()","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:31:08.749437Z","iopub.execute_input":"2024-06-23T02:31:08.750203Z","iopub.status.idle":"2024-06-23T02:31:08.912223Z","shell.execute_reply.started":"2024-06-23T02:31:08.750170Z","shell.execute_reply":"2024-06-23T02:31:08.911039Z"},"trusted":true},"execution_count":44,"outputs":[{"execution_count":44,"output_type":"execute_result","data":{"text/plain":"       11_Mean RR (ms)  5_STD RR/SDNN (ms)  \\\ncount     42132.000000        42132.000000   \nmean         -0.002243           -0.025234   \nstd           0.983002            0.925513   \nmin          -4.270508           -0.601402   \n25%          -0.708378           -0.497526   \n50%          -0.023850           -0.377745   \n75%           0.689093            0.056814   \nmax           9.957347           31.955192   \n\n       11_Mean HR (Kubios' style) (beats/min)  9_Mean HR (beats/min)  \\\ncount                            42132.000000           42132.000000   \nmean                                -0.005617              -0.009664   \nstd                                  0.973000               0.973836   \nmin                                 -3.806570              -3.721262   \n25%                                 -0.718392              -0.723290   \n50%                                 -0.199939              -0.206044   \n75%                                  0.492102               0.485855   \nmax                                  5.609290               5.383190   \n\n       6_STD HR (beats/min)  5_Min HR (beats/min)  6_Max HR (beats/min)  \\\ncount          42132.000000          42132.000000          42132.000000   \nmean              -0.037812              0.004674             -0.012269   \nstd                0.955084              0.967147              0.985006   \nmin               -0.672933             -3.716713             -3.070625   \n25%               -0.572797             -0.684793             -0.710747   \n50%               -0.477768             -0.155733             -0.265953   \n75%               -0.070300              0.505457              0.430633   \nmax               11.896996              6.294343             11.026544   \n\n       5_RMSSD (ms)        3_NNxx   5_pNNxx (%)  ...       8_Min_P  \\\ncount  42132.000000  42132.000000  42132.000000  ...  42132.000000   \nmean      -0.028160      0.020193      0.017069  ...     -0.027199   \nstd        0.907542      0.996126      0.992725  ...      0.973511   \nmin       -0.533904     -1.651270     -1.618757  ...    -67.185152   \n25%       -0.462873     -0.716724     -0.776421  ...     -0.267870   \n50%       -0.372495     -0.093693      0.219067  ...      0.123494   \n75%        0.009496      0.529337      0.908251  ...      0.424543   \nmax       31.117489      4.890552      1.597436  ...      8.432460   \n\n            6_Max_Q      11_Min_Q      11_Max_S       4_Min_S      11_Max_T  \\\ncount  42132.000000  42132.000000  42132.000000  42132.000000  42132.000000   \nmean       0.011134     -0.014810      0.024352      0.046812      0.012566   \nstd        0.982898      1.003379      0.974496      0.945266      0.994116   \nmin      -11.110437    -59.705916    -14.320174    -24.544255     -5.050330   \n25%       -0.161112     -0.129322     -0.251362     -0.207713     -0.487185   \n50%        0.049452      0.177794      0.098608      0.369588     -0.180050   \n75%        0.270544      0.376059      0.304473      0.639226      0.200212   \nmax       54.364418     13.535391     40.711647      3.577587     54.957946   \n\n            1_Min_T  6_VLF_Rel (%)           age           sex  \ncount  42132.000000   42132.000000  42132.000000  42132.000000  \nmean       0.005272      -0.004640     -0.041006      0.047372  \nstd        0.988490       0.990340      0.976884      1.018431  \nmin      -42.372643      -1.114202     -2.654243     -0.666883  \n25%       -0.558319      -0.828360     -0.343298     -0.666883  \n50%       -0.100975      -0.273209      0.005524     -0.666883  \n75%        0.617709       0.548087      0.223537      1.499483  \nmax        8.196555       5.600501     10.339370      1.499483  \n\n[8 rows x 40 columns]","text/html":"<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>11_Mean RR (ms)</th>\n      <th>5_STD RR/SDNN (ms)</th>\n      <th>11_Mean HR (Kubios' style) (beats/min)</th>\n      <th>9_Mean HR (beats/min)</th>\n      <th>6_STD HR (beats/min)</th>\n      <th>5_Min HR (beats/min)</th>\n      <th>6_Max HR (beats/min)</th>\n      <th>5_RMSSD (ms)</th>\n      <th>3_NNxx</th>\n      <th>5_pNNxx (%)</th>\n      <th>...</th>\n      <th>8_Min_P</th>\n      <th>6_Max_Q</th>\n      <th>11_Min_Q</th>\n      <th>11_Max_S</th>\n      <th>4_Min_S</th>\n      <th>11_Max_T</th>\n      <th>1_Min_T</th>\n      <th>6_VLF_Rel (%)</th>\n      <th>age</th>\n      <th>sex</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>count</th>\n      <td>42132.000000</td>\n      <td>42132.000000</td>\n      <td>42132.000000</td>\n      <td>42132.000000</td>\n      <td>42132.000000</td>\n      <td>42132.000000</td>\n      <td>42132.000000</td>\n      <td>42132.000000</td>\n      <td>42132.000000</td>\n      <td>42132.000000</td>\n      <td>...</td>\n      <td>42132.000000</td>\n      <td>42132.000000</td>\n      <td>42132.000000</td>\n      <td>42132.000000</td>\n      <td>42132.000000</td>\n      <td>42132.000000</td>\n      <td>42132.000000</td>\n      <td>42132.000000</td>\n      <td>42132.000000</td>\n      <td>42132.000000</td>\n    </tr>\n    <tr>\n      <th>mean</th>\n      <td>-0.002243</td>\n      <td>-0.025234</td>\n      <td>-0.005617</td>\n      <td>-0.009664</td>\n      <td>-0.037812</td>\n      <td>0.004674</td>\n      <td>-0.012269</td>\n      <td>-0.028160</td>\n      <td>0.020193</td>\n      <td>0.017069</td>\n      <td>...</td>\n      <td>-0.027199</td>\n      <td>0.011134</td>\n      <td>-0.014810</td>\n      <td>0.024352</td>\n      <td>0.046812</td>\n      <td>0.012566</td>\n      <td>0.005272</td>\n      <td>-0.004640</td>\n      <td>-0.041006</td>\n      <td>0.047372</td>\n    </tr>\n    <tr>\n      <th>std</th>\n      <td>0.983002</td>\n      <td>0.925513</td>\n      <td>0.973000</td>\n      <td>0.973836</td>\n      <td>0.955084</td>\n      <td>0.967147</td>\n      <td>0.985006</td>\n      <td>0.907542</td>\n      <td>0.996126</td>\n      <td>0.992725</td>\n      <td>...</td>\n      <td>0.973511</td>\n      <td>0.982898</td>\n      <td>1.003379</td>\n      <td>0.974496</td>\n      <td>0.945266</td>\n      <td>0.994116</td>\n      <td>0.988490</td>\n      <td>0.990340</td>\n      <td>0.976884</td>\n      <td>1.018431</td>\n    </tr>\n    <tr>\n      <th>min</th>\n      <td>-4.270508</td>\n      <td>-0.601402</td>\n      <td>-3.806570</td>\n      <td>-3.721262</td>\n      <td>-0.672933</td>\n      <td>-3.716713</td>\n      <td>-3.070625</td>\n      <td>-0.533904</td>\n      <td>-1.651270</td>\n      <td>-1.618757</td>\n      <td>...</td>\n      <td>-67.185152</td>\n      <td>-11.110437</td>\n      <td>-59.705916</td>\n      <td>-14.320174</td>\n      <td>-24.544255</td>\n      <td>-5.050330</td>\n      <td>-42.372643</td>\n      <td>-1.114202</td>\n      <td>-2.654243</td>\n      <td>-0.666883</td>\n    </tr>\n    <tr>\n      <th>25%</th>\n      <td>-0.708378</td>\n      <td>-0.497526</td>\n      <td>-0.718392</td>\n      <td>-0.723290</td>\n      <td>-0.572797</td>\n      <td>-0.684793</td>\n      <td>-0.710747</td>\n      <td>-0.462873</td>\n      <td>-0.716724</td>\n      <td>-0.776421</td>\n      <td>...</td>\n      <td>-0.267870</td>\n      <td>-0.161112</td>\n      <td>-0.129322</td>\n      <td>-0.251362</td>\n      <td>-0.207713</td>\n      <td>-0.487185</td>\n      <td>-0.558319</td>\n      <td>-0.828360</td>\n      <td>-0.343298</td>\n      <td>-0.666883</td>\n    </tr>\n    <tr>\n      <th>50%</th>\n      <td>-0.023850</td>\n      <td>-0.377745</td>\n      <td>-0.199939</td>\n      <td>-0.206044</td>\n      <td>-0.477768</td>\n      <td>-0.155733</td>\n      <td>-0.265953</td>\n      <td>-0.372495</td>\n      <td>-0.093693</td>\n      <td>0.219067</td>\n      <td>...</td>\n      <td>0.123494</td>\n      <td>0.049452</td>\n      <td>0.177794</td>\n      <td>0.098608</td>\n      <td>0.369588</td>\n      <td>-0.180050</td>\n      <td>-0.100975</td>\n      <td>-0.273209</td>\n      <td>0.005524</td>\n      <td>-0.666883</td>\n    </tr>\n    <tr>\n      <th>75%</th>\n      <td>0.689093</td>\n      <td>0.056814</td>\n      <td>0.492102</td>\n      <td>0.485855</td>\n      <td>-0.070300</td>\n      <td>0.505457</td>\n      <td>0.430633</td>\n      <td>0.009496</td>\n      <td>0.529337</td>\n      <td>0.908251</td>\n      <td>...</td>\n      <td>0.424543</td>\n      <td>0.270544</td>\n      <td>0.376059</td>\n      <td>0.304473</td>\n      <td>0.639226</td>\n      <td>0.200212</td>\n      <td>0.617709</td>\n      <td>0.548087</td>\n      <td>0.223537</td>\n      <td>1.499483</td>\n    </tr>\n    <tr>\n      <th>max</th>\n      <td>9.957347</td>\n      <td>31.955192</td>\n      <td>5.609290</td>\n      <td>5.383190</td>\n      <td>11.896996</td>\n      <td>6.294343</td>\n      <td>11.026544</td>\n      <td>31.117489</td>\n      <td>4.890552</td>\n      <td>1.597436</td>\n      <td>...</td>\n      <td>8.432460</td>\n      <td>54.364418</td>\n      <td>13.535391</td>\n      <td>40.711647</td>\n      <td>3.577587</td>\n      <td>54.957946</td>\n      <td>8.196555</td>\n      <td>5.600501</td>\n      <td>10.339370</td>\n      <td>1.499483</td>\n    </tr>\n  </tbody>\n</table>\n<p>8 rows × 40 columns</p>\n</div>"},"metadata":{}}]},{"cell_type":"markdown","source":"## rhythm","metadata":{}},{"cell_type":"code","source":"df_test = ecg_df_HTV_sns_rutm.copy()","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:31:08.913926Z","iopub.execute_input":"2024-06-23T02:31:08.914238Z","iopub.status.idle":"2024-06-23T02:31:08.976774Z","shell.execute_reply.started":"2024-06-23T02:31:08.914212Z","shell.execute_reply":"2024-06-23T02:31:08.975719Z"},"trusted":true},"execution_count":45,"outputs":[]},{"cell_type":"code","source":"df_new = ecg_df_HTV_sns_rutm.copy()\n#df_new = df_new[df_new['rhythm'] < 5 ]\ndf_new.rhythm.value_counts()","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:31:08.978332Z","iopub.execute_input":"2024-06-23T02:31:08.978731Z","iopub.status.idle":"2024-06-23T02:31:09.044668Z","shell.execute_reply.started":"2024-06-23T02:31:08.978692Z","shell.execute_reply":"2024-06-23T02:31:09.043480Z"},"trusted":true},"execution_count":46,"outputs":[{"execution_count":46,"output_type":"execute_result","data":{"text/plain":"rhythm\n0    26890\n4     5419\n1     4418\n2     3577\n3     1136\n5      692\nName: count, dtype: int64"},"metadata":{}}]},{"cell_type":"code","source":"df_test ","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:31:09.046099Z","iopub.execute_input":"2024-06-23T02:31:09.046519Z","iopub.status.idle":"2024-06-23T02:31:09.087889Z","shell.execute_reply.started":"2024-06-23T02:31:09.046481Z","shell.execute_reply":"2024-06-23T02:31:09.087014Z"},"trusted":true},"execution_count":47,"outputs":[{"execution_count":47,"output_type":"execute_result","data":{"text/plain":"       0_Mean RR (ms)  0_STD RR/SDNN (ms)  \\\n0           -0.153063           -0.561229   \n1            0.388922           -0.576440   \n2            0.491271           -0.590281   \n3            0.288899           -0.479533   \n4           -0.103865           -0.375733   \n...               ...                 ...   \n42127       -0.778497            1.715524   \n42128       -2.112482           -0.634842   \n42129        0.387759           -0.383234   \n42130       -2.310737           -0.582081   \n42131       -2.090052            1.133820   \n\n       0_Mean HR (Kubios' style) (beats/min)  0_Mean HR (beats/min)  \\\n0                                  -0.083994              -0.126195   \n1                                  -0.515920              -0.547819   \n2                                  -0.586560              -0.616799   \n3                                  -0.443854              -0.476953   \n4                                  -0.127784              -0.166998   \n...                                      ...                    ...   \n42127                               0.578779               0.776008   \n42128                               3.247646               3.124736   \n42129                              -0.515100              -0.545722   \n42130                               3.946892               3.808495   \n42131                               3.176366               3.531742   \n\n       0_STD HR (beats/min)  0_Min HR (beats/min)  0_Max HR (beats/min)  \\\n0                 -0.530526              0.203470             -0.348168   \n1                 -0.558183             -0.254884             -0.669709   \n2                 -0.568887             -0.331226             -0.720878   \n3                 -0.491699             -0.215435             -0.588493   \n4                 -0.385191              0.059492             -0.313845   \n...                     ...                   ...                   ...   \n42127              2.063037             -0.254884              1.248192   \n42128             -0.537036              3.727777              1.935656   \n42129             -0.442950             -0.418592             -0.648592   \n42130             -0.338408              4.379785              2.512988   \n42131              3.616414              0.798410              3.863340   \n\n       0_RMSSD (ms)    0_NNxx  0_pNNxx (%)  ...  11_Min_P  11_Max_Q  11_Min_Q  \\\n0         -0.520452 -0.728876    -0.859674  ...  0.044933 -0.359817 -0.148760   \n1         -0.528545 -1.014266    -1.156689  ...  0.390574 -0.464482  0.239995   \n2         -0.507999 -0.728876    -0.785421  ...  0.044933 -0.255152  0.239995   \n3         -0.497463 -0.728876    -0.785421  ...  0.505787 -0.255152  0.239995   \n4         -0.507286 -1.014266    -1.193816  ...  0.275360  0.111174  0.162244   \n...             ...       ...          ...  ...       ...       ...       ...   \n42127      1.652342  1.554242     1.256557  ...  0.367531  0.058842  0.041730   \n42128     -0.565939 -1.299656    -1.527958  ...  0.505787 -0.354584  0.041730   \n42129     -0.267154 -0.158097    -0.042883  ... -0.029956 -0.197587  0.593761   \n42130     -0.527967 -0.728876    -1.237400  ...  0.027651 -0.071989  0.232220   \n42131      0.662538  3.551971     1.176999  ... -1.545016 -0.223753 -0.051571   \n\n        11_Max_S  11_Min_S  11_Max_T  11_Min_T       age       sex  rhythm  \n0      -0.292535 -0.000366  0.039331 -0.326886  0.136332 -0.666883       0  \n1      -0.374881  0.347704 -0.253178 -0.231698  0.136332 -0.666883       0  \n2      -0.292535 -0.000366 -0.019170  0.244242  0.136332 -0.666883       0  \n3      -0.169016  0.376710  0.858357  1.862440  0.136332 -0.666883       0  \n4      -0.395468 -0.000366 -0.004545  0.339431  0.136332 -0.666883       0  \n...          ...       ...       ...       ...       ...       ...     ...  \n42127  -1.161285 -0.728412  0.077358 -0.783789  0.441551 -0.666883       5  \n42128 -11.911554 -8.867451 -0.779694 -0.041322 -0.997339 -0.666883       5  \n42129  -0.938951 -0.119290 -0.650990 -0.041322  1.051989 -0.666883       5  \n42130  -0.720734 -0.940155  0.176811 -1.297804  0.049126 -0.666883       5  \n42131   0.205658 -2.074283  0.147560 -1.017000 -0.430504 -0.666883       5  \n\n[42132 rows x 459 columns]","text/html":"<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>0_Mean RR (ms)</th>\n      <th>0_STD RR/SDNN (ms)</th>\n      <th>0_Mean HR (Kubios' style) (beats/min)</th>\n      <th>0_Mean HR (beats/min)</th>\n      <th>0_STD HR (beats/min)</th>\n      <th>0_Min HR (beats/min)</th>\n      <th>0_Max HR (beats/min)</th>\n      <th>0_RMSSD (ms)</th>\n      <th>0_NNxx</th>\n      <th>0_pNNxx (%)</th>\n      <th>...</th>\n      <th>11_Min_P</th>\n      <th>11_Max_Q</th>\n      <th>11_Min_Q</th>\n      <th>11_Max_S</th>\n      <th>11_Min_S</th>\n      <th>11_Max_T</th>\n      <th>11_Min_T</th>\n      <th>age</th>\n      <th>sex</th>\n      <th>rhythm</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>-0.153063</td>\n      <td>-0.561229</td>\n      <td>-0.083994</td>\n      <td>-0.126195</td>\n      <td>-0.530526</td>\n      <td>0.203470</td>\n      <td>-0.348168</td>\n      <td>-0.520452</td>\n      <td>-0.728876</td>\n      <td>-0.859674</td>\n      <td>...</td>\n      <td>0.044933</td>\n      <td>-0.359817</td>\n      <td>-0.148760</td>\n      <td>-0.292535</td>\n      <td>-0.000366</td>\n      <td>0.039331</td>\n      <td>-0.326886</td>\n      <td>0.136332</td>\n      <td>-0.666883</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>0.388922</td>\n      <td>-0.576440</td>\n      <td>-0.515920</td>\n      <td>-0.547819</td>\n      <td>-0.558183</td>\n      <td>-0.254884</td>\n      <td>-0.669709</td>\n      <td>-0.528545</td>\n      <td>-1.014266</td>\n      <td>-1.156689</td>\n      <td>...</td>\n      <td>0.390574</td>\n      <td>-0.464482</td>\n      <td>0.239995</td>\n      <td>-0.374881</td>\n      <td>0.347704</td>\n      <td>-0.253178</td>\n      <td>-0.231698</td>\n      <td>0.136332</td>\n      <td>-0.666883</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>0.491271</td>\n      <td>-0.590281</td>\n      <td>-0.586560</td>\n      <td>-0.616799</td>\n      <td>-0.568887</td>\n      <td>-0.331226</td>\n      <td>-0.720878</td>\n      <td>-0.507999</td>\n      <td>-0.728876</td>\n      <td>-0.785421</td>\n      <td>...</td>\n      <td>0.044933</td>\n      <td>-0.255152</td>\n      <td>0.239995</td>\n      <td>-0.292535</td>\n      <td>-0.000366</td>\n      <td>-0.019170</td>\n      <td>0.244242</td>\n      <td>0.136332</td>\n      <td>-0.666883</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>0.288899</td>\n      <td>-0.479533</td>\n      <td>-0.443854</td>\n      <td>-0.476953</td>\n      <td>-0.491699</td>\n      <td>-0.215435</td>\n      <td>-0.588493</td>\n      <td>-0.497463</td>\n      <td>-0.728876</td>\n      <td>-0.785421</td>\n      <td>...</td>\n      <td>0.505787</td>\n      <td>-0.255152</td>\n      <td>0.239995</td>\n      <td>-0.169016</td>\n      <td>0.376710</td>\n      <td>0.858357</td>\n      <td>1.862440</td>\n      <td>0.136332</td>\n      <td>-0.666883</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>-0.103865</td>\n      <td>-0.375733</td>\n      <td>-0.127784</td>\n      <td>-0.166998</td>\n      <td>-0.385191</td>\n      <td>0.059492</td>\n      <td>-0.313845</td>\n      <td>-0.507286</td>\n      <td>-1.014266</td>\n      <td>-1.193816</td>\n      <td>...</td>\n      <td>0.275360</td>\n      <td>0.111174</td>\n      <td>0.162244</td>\n      <td>-0.395468</td>\n      <td>-0.000366</td>\n      <td>-0.004545</td>\n      <td>0.339431</td>\n      <td>0.136332</td>\n      <td>-0.666883</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>...</th>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n    </tr>\n    <tr>\n      <th>42127</th>\n      <td>-0.778497</td>\n      <td>1.715524</td>\n      <td>0.578779</td>\n      <td>0.776008</td>\n      <td>2.063037</td>\n      <td>-0.254884</td>\n      <td>1.248192</td>\n      <td>1.652342</td>\n      <td>1.554242</td>\n      <td>1.256557</td>\n      <td>...</td>\n      <td>0.367531</td>\n      <td>0.058842</td>\n      <td>0.041730</td>\n      <td>-1.161285</td>\n      <td>-0.728412</td>\n      <td>0.077358</td>\n      <td>-0.783789</td>\n      <td>0.441551</td>\n      <td>-0.666883</td>\n      <td>5</td>\n    </tr>\n    <tr>\n      <th>42128</th>\n      <td>-2.112482</td>\n      <td>-0.634842</td>\n      <td>3.247646</td>\n      <td>3.124736</td>\n      <td>-0.537036</td>\n      <td>3.727777</td>\n      <td>1.935656</td>\n      <td>-0.565939</td>\n      <td>-1.299656</td>\n      <td>-1.527958</td>\n      <td>...</td>\n      <td>0.505787</td>\n      <td>-0.354584</td>\n      <td>0.041730</td>\n      <td>-11.911554</td>\n      <td>-8.867451</td>\n      <td>-0.779694</td>\n      <td>-0.041322</td>\n      <td>-0.997339</td>\n      <td>-0.666883</td>\n      <td>5</td>\n    </tr>\n    <tr>\n      <th>42129</th>\n      <td>0.387759</td>\n      <td>-0.383234</td>\n      <td>-0.515100</td>\n      <td>-0.545722</td>\n      <td>-0.442950</td>\n      <td>-0.418592</td>\n      <td>-0.648592</td>\n      <td>-0.267154</td>\n      <td>-0.158097</td>\n      <td>-0.042883</td>\n      <td>...</td>\n      <td>-0.029956</td>\n      <td>-0.197587</td>\n      <td>0.593761</td>\n      <td>-0.938951</td>\n      <td>-0.119290</td>\n      <td>-0.650990</td>\n      <td>-0.041322</td>\n      <td>1.051989</td>\n      <td>-0.666883</td>\n      <td>5</td>\n    </tr>\n    <tr>\n      <th>42130</th>\n      <td>-2.310737</td>\n      <td>-0.582081</td>\n      <td>3.946892</td>\n      <td>3.808495</td>\n      <td>-0.338408</td>\n      <td>4.379785</td>\n      <td>2.512988</td>\n      <td>-0.527967</td>\n      <td>-0.728876</td>\n      <td>-1.237400</td>\n      <td>...</td>\n      <td>0.027651</td>\n      <td>-0.071989</td>\n      <td>0.232220</td>\n      <td>-0.720734</td>\n      <td>-0.940155</td>\n      <td>0.176811</td>\n      <td>-1.297804</td>\n      <td>0.049126</td>\n      <td>-0.666883</td>\n      <td>5</td>\n    </tr>\n    <tr>\n      <th>42131</th>\n      <td>-2.090052</td>\n      <td>1.133820</td>\n      <td>3.176366</td>\n      <td>3.531742</td>\n      <td>3.616414</td>\n      <td>0.798410</td>\n      <td>3.863340</td>\n      <td>0.662538</td>\n      <td>3.551971</td>\n      <td>1.176999</td>\n      <td>...</td>\n      <td>-1.545016</td>\n      <td>-0.223753</td>\n      <td>-0.051571</td>\n      <td>0.205658</td>\n      <td>-2.074283</td>\n      <td>0.147560</td>\n      <td>-1.017000</td>\n      <td>-0.430504</td>\n      <td>-0.666883</td>\n      <td>5</td>\n    </tr>\n  </tbody>\n</table>\n<p>42132 rows × 459 columns</p>\n</div>"},"metadata":{}}]},{"cell_type":"code","source":"n = 3000\ndf_new =df_test[df_test.rhythm == 0.0][:n ].copy()\nfor i in [1.0,2.0,3.0,4.0,5.0,6.0]:\n    df_new = pd.concat([df_new, df_test[df_test.rhythm == i][:n ]], ignore_index=True)","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:31:09.089120Z","iopub.execute_input":"2024-06-23T02:31:09.089389Z","iopub.status.idle":"2024-06-23T02:31:09.226440Z","shell.execute_reply.started":"2024-06-23T02:31:09.089365Z","shell.execute_reply":"2024-06-23T02:31:09.225250Z"},"trusted":true},"execution_count":48,"outputs":[]},{"cell_type":"code","source":"df_new.rhythm.value_counts()","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:31:09.227543Z","iopub.execute_input":"2024-06-23T02:31:09.227831Z","iopub.status.idle":"2024-06-23T02:31:09.236436Z","shell.execute_reply.started":"2024-06-23T02:31:09.227799Z","shell.execute_reply":"2024-06-23T02:31:09.235129Z"},"trusted":true},"execution_count":49,"outputs":[{"execution_count":49,"output_type":"execute_result","data":{"text/plain":"rhythm\n0    3000\n1    3000\n2    3000\n4    3000\n3    1136\n5     692\nName: count, dtype: int64"},"metadata":{}}]},{"cell_type":"code","source":"list_corr_rhythm_2 = list_corr_rhythm[::3]\nlist_corr_rhythm_2.append('rhythm')","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:31:09.237657Z","iopub.execute_input":"2024-06-23T02:31:09.238030Z","iopub.status.idle":"2024-06-23T02:31:09.244488Z","shell.execute_reply.started":"2024-06-23T02:31:09.237999Z","shell.execute_reply":"2024-06-23T02:31:09.243228Z"},"trusted":true},"execution_count":50,"outputs":[]},{"cell_type":"code","source":"df_new.columns[:-1]","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:31:09.245922Z","iopub.execute_input":"2024-06-23T02:31:09.246303Z","iopub.status.idle":"2024-06-23T02:31:09.255124Z","shell.execute_reply.started":"2024-06-23T02:31:09.246268Z","shell.execute_reply":"2024-06-23T02:31:09.254142Z"},"trusted":true},"execution_count":51,"outputs":[{"execution_count":51,"output_type":"execute_result","data":{"text/plain":"Index(['0_Mean RR (ms)', '0_STD RR/SDNN (ms)',\n       '0_Mean HR (Kubios' style) (beats/min)', '0_Mean HR (beats/min)',\n       '0_STD HR (beats/min)', '0_Min HR (beats/min)', '0_Max HR (beats/min)',\n       '0_RMSSD (ms)', '0_NNxx', '0_pNNxx (%)',\n       ...\n       '11_Max_P', '11_Min_P', '11_Max_Q', '11_Min_Q', '11_Max_S', '11_Min_S',\n       '11_Max_T', '11_Min_T', 'age', 'sex'],\n      dtype='object', length=458)"},"metadata":{}}]},{"cell_type":"code","source":"# df_new = df_new[df_new.rhythm < 5]\n#X_rhythm,  y_rhythm  = df_new[list_corr_rhythm_2[:-1]], df_new['rhythm']\ndf_new = df_new.dropna()\nX_rhythm,  y_rhythm  = df_new[df_new.columns[:-1]], df_new['rhythm']\ny_rhythm=y_rhythm.astype('int')","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:31:09.256100Z","iopub.execute_input":"2024-06-23T02:31:09.256416Z","iopub.status.idle":"2024-06-23T02:31:09.298171Z","shell.execute_reply.started":"2024-06-23T02:31:09.256377Z","shell.execute_reply":"2024-06-23T02:31:09.297313Z"},"trusted":true},"execution_count":52,"outputs":[]},{"cell_type":"code","source":"sm = KMeansSMOTE(random_state=42,cluster_balance_threshold = 0.01)\nX_rhythm, y_rhythm = sm.fit_resample(X_rhythm, y_rhythm)\nsm = BorderlineSMOTE(random_state=42)\nX_rhythm, y_rhythm = sm.fit_resample(X_rhythm, y_rhythm)","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:31:09.299464Z","iopub.execute_input":"2024-06-23T02:31:09.299857Z","iopub.status.idle":"2024-06-23T02:31:14.979023Z","shell.execute_reply.started":"2024-06-23T02:31:09.299817Z","shell.execute_reply":"2024-06-23T02:31:14.977669Z"},"trusted":true},"execution_count":53,"outputs":[{"name":"stderr","text":"/opt/conda/lib/python3.10/site-packages/sklearn/cluster/_kmeans.py:870: FutureWarning: The default value of `n_init` will change from 3 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n  warnings.warn(\n/opt/conda/lib/python3.10/site-packages/sklearn/cluster/_kmeans.py:870: FutureWarning: The default value of `n_init` will change from 3 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n  warnings.warn(\n","output_type":"stream"}]},{"cell_type":"code","source":"X_train, X_valid, y_train, y_valid = train_test_split(X_rhythm, y_rhythm, test_size=0.1, random_state=0)#test_size=0.3 # random_state=1235","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:31:14.980158Z","iopub.execute_input":"2024-06-23T02:31:14.981058Z","iopub.status.idle":"2024-06-23T02:31:15.079919Z","shell.execute_reply.started":"2024-06-23T02:31:14.981020Z","shell.execute_reply":"2024-06-23T02:31:15.078772Z"},"trusted":true},"execution_count":54,"outputs":[]},{"cell_type":"markdown","source":"## LGBMClassifier","metadata":{}},{"cell_type":"code","source":"from sklearn.metrics import f1_score,accuracy_score,balanced_accuracy_score","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:31:15.081410Z","iopub.execute_input":"2024-06-23T02:31:15.081772Z","iopub.status.idle":"2024-06-23T02:31:15.086802Z","shell.execute_reply.started":"2024-06-23T02:31:15.081738Z","shell.execute_reply":"2024-06-23T02:31:15.085706Z"},"trusted":true},"execution_count":55,"outputs":[]},{"cell_type":"code","source":"model_LGBMClassifier = LGBMClassifier()\nmodel_LGBMClassifier.fit(X_train, y_train)\nprint(\"score \",model_LGBMClassifier.score(X_train, y_train))\ny_predict = model_LGBMClassifier.predict(X_valid)","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:34:07.660445Z","iopub.execute_input":"2024-06-23T02:34:07.660885Z","iopub.status.idle":"2024-06-23T02:34:32.540606Z","shell.execute_reply.started":"2024-06-23T02:34:07.660849Z","shell.execute_reply":"2024-06-23T02:34:32.539786Z"},"trusted":true},"execution_count":65,"outputs":[{"name":"stdout","text":"[LightGBM] [Warning] Found whitespace in feature_names, replace with underlines\n[LightGBM] [Info] Auto-choosing col-wise multi-threading, the overhead of testing was 0.096334 seconds.\nYou can set `force_col_wise=true` to remove the overhead.\n[LightGBM] [Info] Total Bins 9993\n[LightGBM] [Info] Number of data points in the train set: 145233, number of used features: 40\n[LightGBM] [Info] Start training from score -1.792607\n[LightGBM] [Info] Start training from score -1.786794\n[LightGBM] [Info] Start training from score -1.794221\n[LightGBM] [Info] Start training from score -1.792689\n[LightGBM] [Info] Start training from score -1.792648\n[LightGBM] [Info] Start training from score -1.791615\nscore  0.9802317655078391\n","output_type":"stream"}]},{"cell_type":"code","source":"print(\"f1_score micro \",f1_score(y_valid,y_predict, average='micro')) #\"samples\"\nprint(\"f1_score macro \",f1_score(y_valid,y_predict, average='macro'))\nprint(\"f1_score weighted \",f1_score(y_valid,y_predict, average='weighted'))","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:34:32.541702Z","iopub.execute_input":"2024-06-23T02:34:32.544658Z","iopub.status.idle":"2024-06-23T02:34:32.561889Z","shell.execute_reply.started":"2024-06-23T02:34:32.544628Z","shell.execute_reply":"2024-06-23T02:34:32.561029Z"},"trusted":true},"execution_count":66,"outputs":[{"name":"stdout","text":"f1_score micro  0.9639957860816757\nf1_score macro  0.9636863443585985\nf1_score weighted  0.9637472564282\n","output_type":"stream"}]},{"cell_type":"code","source":"accuracy_score(y_valid, y_predict),balanced_accuracy_score(y_valid, y_predict)","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:34:32.564435Z","iopub.execute_input":"2024-06-23T02:34:32.565055Z","iopub.status.idle":"2024-06-23T02:34:32.574087Z","shell.execute_reply.started":"2024-06-23T02:34:32.565020Z","shell.execute_reply":"2024-06-23T02:34:32.573146Z"},"trusted":true},"execution_count":67,"outputs":[{"execution_count":67,"output_type":"execute_result","data":{"text/plain":"(0.9639957860816757, 0.9639737553360056)"},"metadata":{}}]},{"cell_type":"code","source":"from sklearn.metrics import classification_report\nprint(classification_report(y_valid, y_predict))","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:34:33.504434Z","iopub.execute_input":"2024-06-23T02:34:33.506284Z","iopub.status.idle":"2024-06-23T02:34:33.525778Z","shell.execute_reply.started":"2024-06-23T02:34:33.506254Z","shell.execute_reply":"2024-06-23T02:34:33.524863Z"},"trusted":true},"execution_count":69,"outputs":[{"name":"stdout","text":"              precision    recall  f1-score   support\n\n           0       0.95      0.89      0.92      2710\n           1       0.96      0.96      0.96      2569\n           2       0.99      0.99      0.99      2749\n           3       0.96      0.99      0.97      2712\n           4       0.94      0.97      0.95      2711\n           5       0.98      0.99      0.98      2686\n\n    accuracy                           0.96     16137\n   macro avg       0.96      0.96      0.96     16137\nweighted avg       0.96      0.96      0.96     16137\n\n","output_type":"stream"}]},{"cell_type":"code","source":"print(classification_report(df_test['rhythm'], model_LGBMClassifier.predict(df_test[X_rhythm.columns])))","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:34:32.575589Z","iopub.execute_input":"2024-06-23T02:34:32.575961Z","iopub.status.idle":"2024-06-23T02:34:33.503100Z","shell.execute_reply.started":"2024-06-23T02:34:32.575928Z","shell.execute_reply":"2024-06-23T02:34:33.502032Z"},"trusted":true},"execution_count":68,"outputs":[{"name":"stdout","text":"              precision    recall  f1-score   support\n\n           0       0.97      0.93      0.95     26890\n           1       0.90      0.92      0.91      4418\n           2       0.98      0.97      0.97      3577\n           3       0.63      0.84      0.72      1136\n           4       0.82      0.94      0.87      5419\n           5       0.79      0.77      0.78       692\n\n    accuracy                           0.93     42132\n   macro avg       0.85      0.89      0.87     42132\nweighted avg       0.93      0.93      0.93     42132\n\n","output_type":"stream"}]},{"cell_type":"code","source":"#scores = cross_val_score(model_LGBMClassifier, X_rhythm, y_rhythm, cv=len(y_rhythm.value_counts().index))\n#scores","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_new[df_new.columns[38*(11):38*12]][:2]","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Функция для создания модели для определенных отведений","metadata":{}},{"cell_type":"code","source":"def X_y_func(df_new,n=0,count=6):\n    X_rhythm,  y_rhythm  = df_new[df_new.columns[38*(n):38*count]], df_new['rhythm']\n    y_rhythm=y_rhythm.astype('int')\n    X_rhythm[\"age\"]=df_new[\"age\"]\n    X_rhythm[\"sex\"]=df_new[\"sex\"]\n    sm = KMeansSMOTE(random_state=42,cluster_balance_threshold = 0.01)\n    X_rhythm, y_rhythm = sm.fit_resample(X_rhythm, y_rhythm)\n    sm = BorderlineSMOTE(random_state=42)\n    X_rhythm, y_rhythm = sm.fit_resample(X_rhythm, y_rhythm)\n    X_train, X_valid, y_train, y_valid = train_test_split(X_rhythm, y_rhythm, test_size=0.1, random_state=0)\n    return X_train, X_valid, y_train, y_valid\ndef r_led(model,df_new,model_name,n,count,list_score):\n    X_train, X_valid, y_train, y_valid = X_y_func(df_new,n,count)\n    model.fit(X_train, y_train)\n    y_predict = model.predict(X_valid)\n    list_score.append(accuracy_score(y_valid, y_predict))\n    dump(model, model_name +str(n)+\"_\"+str(count)+'_led_r.joblib', compress=9)\n    return list_score","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"list_score = []\nlist_score = r_led( LGBMClassifier(),df_new,\"LGBMClassifier\",0,6,list_score)\nlist_score = r_led( LGBMClassifier(),df_new,\"LGBMClassifier\",6,12,list_score)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#list_score","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"list_score = []\nfor i in range(1,13):\n    list_score = r_led( LGBMClassifier(),df_new,\"LGBMClassifier\",i-1,i,list_score)\n    ","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from joblib import dump\ndump(model_LGBMClassifier, 'LGBMClassifier_12_led_r(1).joblib', compress=9)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pd.DataFrame(list_corr_rhythm_2).to_csv(\"list_corr_rhythm.csv\")\npd.DataFrame(list(uniques_rhythm)).to_csv(\"uniques_rhythm.csv\")","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"uniques_rhythm_2  = pd.DataFrame(list(uniques_rhythm))\nuniques_rhythm_2","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.multiclass import OneVsOneClassifier\nfrom sklearn.svm import LinearSVC\nclf = OneVsOneClassifier(LinearSVC(random_state=0)).fit(X_train, y_train)\ny_predict = clf.predict(X_valid)\nfrom sklearn.metrics import classification_report\nclf.score(X_valid, y_valid) ,clf.score(X_valid,clf.predict(X_valid)) ","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:34:33.527068Z","iopub.execute_input":"2024-06-23T02:34:33.527437Z","iopub.status.idle":"2024-06-23T02:35:44.463758Z","shell.execute_reply.started":"2024-06-23T02:34:33.527405Z","shell.execute_reply":"2024-06-23T02:35:44.462652Z"},"trusted":true},"execution_count":70,"outputs":[{"name":"stderr","text":"/opt/conda/lib/python3.10/site-packages/sklearn/svm/_base.py:1244: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n  warnings.warn(\n/opt/conda/lib/python3.10/site-packages/sklearn/svm/_base.py:1244: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n  warnings.warn(\n/opt/conda/lib/python3.10/site-packages/sklearn/svm/_base.py:1244: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n  warnings.warn(\n/opt/conda/lib/python3.10/site-packages/sklearn/svm/_base.py:1244: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n  warnings.warn(\n/opt/conda/lib/python3.10/site-packages/sklearn/svm/_base.py:1244: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n  warnings.warn(\n/opt/conda/lib/python3.10/site-packages/sklearn/svm/_base.py:1244: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n  warnings.warn(\n/opt/conda/lib/python3.10/site-packages/sklearn/svm/_base.py:1244: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n  warnings.warn(\n/opt/conda/lib/python3.10/site-packages/sklearn/svm/_base.py:1244: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n  warnings.warn(\n/opt/conda/lib/python3.10/site-packages/sklearn/svm/_base.py:1244: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n  warnings.warn(\n/opt/conda/lib/python3.10/site-packages/sklearn/svm/_base.py:1244: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n  warnings.warn(\n/opt/conda/lib/python3.10/site-packages/sklearn/svm/_base.py:1244: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n  warnings.warn(\n/opt/conda/lib/python3.10/site-packages/sklearn/svm/_base.py:1244: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n  warnings.warn(\n/opt/conda/lib/python3.10/site-packages/sklearn/svm/_base.py:1244: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n  warnings.warn(\n/opt/conda/lib/python3.10/site-packages/sklearn/svm/_base.py:1244: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n  warnings.warn(\n/opt/conda/lib/python3.10/site-packages/sklearn/svm/_base.py:1244: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n  warnings.warn(\n","output_type":"stream"},{"execution_count":70,"output_type":"execute_result","data":{"text/plain":"(0.7927124000743633, 1.0)"},"metadata":{}}]},{"cell_type":"code","source":"list_score = []\nlist_score = r_led( OneVsOneClassifier(LinearSVC(random_state=0)),df_new,\"LinearSVC\",0,6,list_score)\nlist_score = r_led( OneVsOneClassifier(LinearSVC(random_state=0)),df_new,\"LinearSVC\",6,12,list_score)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"list_score = []\nlist_score = r_led( OneVsOneClassifier(LinearSVC(random_state=0)),df_new,\"LinearSVC\",0,6,list_score)\nlist_score = r_led( OneVsOneClassifier(LinearSVC(random_state=0)),df_new,\"LinearSVC\",6,12,list_score)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(classification_report(y_valid, clf.predict(X_valid)))","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:35:44.465182Z","iopub.execute_input":"2024-06-23T02:35:44.466207Z","iopub.status.idle":"2024-06-23T02:35:44.564136Z","shell.execute_reply.started":"2024-06-23T02:35:44.466171Z","shell.execute_reply":"2024-06-23T02:35:44.563000Z"},"trusted":true},"execution_count":71,"outputs":[{"name":"stdout","text":"              precision    recall  f1-score   support\n\n           0       0.85      0.72      0.78      2710\n           1       0.65      0.80      0.72      2569\n           2       0.91      0.93      0.92      2749\n           3       0.77      0.79      0.78      2712\n           4       0.86      0.94      0.90      2711\n           5       0.72      0.57      0.64      2686\n\n    accuracy                           0.79     16137\n   macro avg       0.79      0.79      0.79     16137\nweighted avg       0.80      0.79      0.79     16137\n\n","output_type":"stream"}]},{"cell_type":"code","source":"from joblib import dump\ndump(clf, 'LinearSVC_12_led_r.joblib', compress=9)","metadata":{"execution":{"iopub.status.busy":"2024-06-10T12:45:09.074697Z","iopub.execute_input":"2024-06-10T12:45:09.075703Z","iopub.status.idle":"2024-06-10T12:45:09.093918Z","shell.execute_reply.started":"2024-06-10T12:45:09.075673Z","shell.execute_reply":"2024-06-10T12:45:09.092914Z"},"trusted":true},"execution_count":74,"outputs":[{"execution_count":74,"output_type":"execute_result","data":{"text/plain":"['LinearSVC_12_led_r.joblib']"},"metadata":{}}]},{"cell_type":"markdown","source":"LSTIM","metadata":{}},{"cell_type":"code","source":"from keras import callbacks\nfrom keras.models import Sequential\nfrom keras.layers import Dense, BatchNormalization, Dropout, LSTM, Flatten\nfrom keras.layers import Conv1D, GlobalAveragePooling1D, MaxPool1D, ZeroPadding1D, LSTM, Bidirectional\nimport tensorflow as tf","metadata":{"execution":{"iopub.status.busy":"2024-06-18T10:28:52.376276Z","iopub.execute_input":"2024-06-18T10:28:52.376686Z","iopub.status.idle":"2024-06-18T10:29:04.078136Z","shell.execute_reply.started":"2024-06-18T10:28:52.376656Z","shell.execute_reply":"2024-06-18T10:29:04.077112Z"},"trusted":true},"execution_count":35,"outputs":[{"name":"stderr","text":"2024-06-18 10:28:53.963432: E external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:9261] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n2024-06-18 10:28:53.963581: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:607] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n2024-06-18 10:28:54.081456: E external/local_xla/xla/stream_executor/cuda/cuda_blas.cc:1515] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n","output_type":"stream"}]},{"cell_type":"code","source":"import keras","metadata":{"execution":{"iopub.status.busy":"2024-06-18T10:54:34.294417Z","iopub.execute_input":"2024-06-18T10:54:34.294806Z","iopub.status.idle":"2024-06-18T10:54:34.299343Z","shell.execute_reply.started":"2024-06-18T10:54:34.294777Z","shell.execute_reply":"2024-06-18T10:54:34.298426Z"},"trusted":true},"execution_count":39,"outputs":[]},{"cell_type":"code","source":"df_new = df_test.dropna()\nX_rhythm,  y_rhythm  = df_new[list_corr_rhythm_2[:-1]], df_new['rhythm']\ny_rhythm=y_rhythm.astype('int')\nsm = KMeansSMOTE(random_state=42,cluster_balance_threshold = 0.01)\nX_rhythm, y_rhythm = sm.fit_resample(X_rhythm, y_rhythm)\nsm = BorderlineSMOTE(random_state=42)\nX_rhythm, y_rhythm = sm.fit_resample(X_rhythm, y_rhythm)\nX_train, X_valid, y_train, y_valid = train_test_split(X_rhythm, y_rhythm, test_size=0.1, random_state=0)","metadata":{"execution":{"iopub.status.busy":"2024-06-23T02:33:23.861550Z","iopub.execute_input":"2024-06-23T02:33:23.862509Z","iopub.status.idle":"2024-06-23T02:34:07.658468Z","shell.execute_reply.started":"2024-06-23T02:33:23.862467Z","shell.execute_reply":"2024-06-23T02:34:07.657636Z"},"trusted":true},"execution_count":64,"outputs":[{"name":"stderr","text":"/opt/conda/lib/python3.10/site-packages/sklearn/cluster/_kmeans.py:870: FutureWarning: The default value of `n_init` will change from 3 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n  warnings.warn(\n/opt/conda/lib/python3.10/site-packages/sklearn/cluster/_kmeans.py:870: FutureWarning: The default value of `n_init` will change from 3 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n  warnings.warn(\n/opt/conda/lib/python3.10/site-packages/sklearn/cluster/_kmeans.py:870: FutureWarning: The default value of `n_init` will change from 3 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n  warnings.warn(\n/opt/conda/lib/python3.10/site-packages/sklearn/cluster/_kmeans.py:870: FutureWarning: The default value of `n_init` will change from 3 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n  warnings.warn(\n/opt/conda/lib/python3.10/site-packages/sklearn/cluster/_kmeans.py:870: FutureWarning: The default value of `n_init` will change from 3 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n  warnings.warn(\n","output_type":"stream"}]},{"cell_type":"code","source":"early_stopping = callbacks.EarlyStopping(\n    min_delta=0.001, \n    patience=20, \n    restore_best_weights=True)\n\nlstm_model = Sequential()\nlstm_model.add(LSTM(1024,  input_shape=(X_train.shape[1], 1), return_sequences=True))\nlstm_model.add(LSTM(1024))\nlstm_model.add(Dense(512,activation = 'relu'))\nlstm_model.add(Dropout(0.25))\nlstm_model.add(Dense(units = 256, kernel_initializer = 'uniform', activation = 'relu'))\nlstm_model.add(Dropout(0.25))\nlstm_model.add(Dense(256, bias_regularizer=tf.keras.regularizers.l2(0.01)))\nlstm_model.add(Dropout(0.25))\n\nlstm_model.add(Dense(len(y_train.value_counts().index), activation = 'sigmoid'))\nlstm_model.compile(optimizer = 'adam', loss = 'sparse_categorical_crossentropy', metrics = ['accuracy'])\nhistory = lstm_model.fit(X_train, y_train, batch_size = 126, epochs = 20, verbose=1, validation_split=0.2)\n","metadata":{"execution":{"iopub.status.busy":"2024-06-18T10:29:40.015066Z","iopub.execute_input":"2024-06-18T10:29:40.015411Z","iopub.status.idle":"2024-06-18T10:54:13.326729Z","shell.execute_reply.started":"2024-06-18T10:29:40.015384Z","shell.execute_reply":"2024-06-18T10:54:13.325528Z"},"trusted":true},"execution_count":37,"outputs":[{"name":"stderr","text":"/opt/conda/lib/python3.10/site-packages/keras/src/layers/rnn/rnn.py:205: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n  super().__init__(**kwargs)\n","output_type":"stream"},{"name":"stdout","text":"Epoch 1/20\n\u001b[1m923/923\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m78s\u001b[0m 80ms/step - accuracy: 0.5772 - loss: 0.9696 - val_accuracy: 0.7275 - val_loss: 0.6828\nEpoch 2/20\n\u001b[1m923/923\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m79s\u001b[0m 79ms/step - accuracy: 0.7745 - loss: 0.5393 - val_accuracy: 0.8328 - val_loss: 0.4557\nEpoch 3/20\n\u001b[1m923/923\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m73s\u001b[0m 79ms/step - accuracy: 0.8591 - loss: 0.3950 - val_accuracy: 0.8904 - val_loss: 0.3213\nEpoch 4/20\n\u001b[1m923/923\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m73s\u001b[0m 79ms/step - accuracy: 0.9043 - loss: 0.2845 - val_accuracy: 0.9314 - val_loss: 0.2120\nEpoch 5/20\n\u001b[1m923/923\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m73s\u001b[0m 79ms/step - accuracy: 0.9307 - loss: 0.2142 - val_accuracy: 0.9377 - val_loss: 0.1994\nEpoch 6/20\n\u001b[1m923/923\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m73s\u001b[0m 79ms/step - accuracy: 0.9416 - loss: 0.1819 - val_accuracy: 0.9346 - val_loss: 0.2048\nEpoch 7/20\n\u001b[1m923/923\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m73s\u001b[0m 79ms/step - accuracy: 0.9491 - loss: 0.1564 - val_accuracy: 0.9451 - val_loss: 0.1743\nEpoch 8/20\n\u001b[1m923/923\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m72s\u001b[0m 78ms/step - accuracy: 0.9581 - loss: 0.1318 - val_accuracy: 0.9486 - val_loss: 0.1741\nEpoch 9/20\n\u001b[1m923/923\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m72s\u001b[0m 78ms/step - accuracy: 0.9618 - loss: 0.1197 - val_accuracy: 0.9527 - val_loss: 0.1573\nEpoch 10/20\n\u001b[1m923/923\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m72s\u001b[0m 78ms/step - accuracy: 0.9666 - loss: 0.1019 - val_accuracy: 0.9552 - val_loss: 0.1606\nEpoch 11/20\n\u001b[1m923/923\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m72s\u001b[0m 78ms/step - accuracy: 0.9703 - loss: 0.0889 - val_accuracy: 0.9570 - val_loss: 0.1479\nEpoch 12/20\n\u001b[1m923/923\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m72s\u001b[0m 78ms/step - accuracy: 0.9733 - loss: 0.0801 - val_accuracy: 0.9593 - val_loss: 0.1592\nEpoch 13/20\n\u001b[1m923/923\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m73s\u001b[0m 79ms/step - accuracy: 0.9766 - loss: 0.0706 - val_accuracy: 0.9582 - val_loss: 0.1612\nEpoch 14/20\n\u001b[1m923/923\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m72s\u001b[0m 79ms/step - accuracy: 0.9766 - loss: 0.0701 - val_accuracy: 0.9565 - val_loss: 0.1920\nEpoch 15/20\n\u001b[1m923/923\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m73s\u001b[0m 79ms/step - accuracy: 0.9822 - loss: 0.0561 - val_accuracy: 0.9588 - val_loss: 0.1881\nEpoch 16/20\n\u001b[1m923/923\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m73s\u001b[0m 79ms/step - accuracy: 0.9839 - loss: 0.0492 - val_accuracy: 0.9576 - val_loss: 0.1836\nEpoch 17/20\n\u001b[1m923/923\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m73s\u001b[0m 79ms/step - accuracy: 0.9865 - loss: 0.0441 - val_accuracy: 0.9587 - val_loss: 0.1812\nEpoch 18/20\n\u001b[1m923/923\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m73s\u001b[0m 79ms/step - accuracy: 0.9865 - loss: 0.0444 - val_accuracy: 0.9593 - val_loss: 0.2048\nEpoch 19/20\n\u001b[1m923/923\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m73s\u001b[0m 80ms/step - accuracy: 0.9878 - loss: 0.0366 - val_accuracy: 0.9557 - val_loss: 0.2112\nEpoch 20/20\n\u001b[1m923/923\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m73s\u001b[0m 79ms/step - accuracy: 0.9895 - loss: 0.0320 - val_accuracy: 0.9563 - val_loss: 0.2230\n","output_type":"stream"}]},{"cell_type":"code","source":"#keras.utils.plot_model(lstm_model, 'multi_input_and_output_model.png', show_shapes=True)","metadata":{"execution":{"iopub.status.busy":"2024-06-20T18:26:53.147365Z","iopub.execute_input":"2024-06-20T18:26:53.148292Z","iopub.status.idle":"2024-06-20T18:26:53.152625Z","shell.execute_reply.started":"2024-06-20T18:26:53.148262Z","shell.execute_reply":"2024-06-20T18:26:53.151760Z"},"trusted":true},"execution_count":1,"outputs":[]},{"cell_type":"code","source":"val_accuracy = np.mean(history.history['accuracy'])\nprint(\"\\n%s: %.2f%%\" % ('val_accuracy', np.mean(history.history['accuracy'])*100))","metadata":{"execution":{"iopub.status.busy":"2024-06-18T10:54:58.480965Z","iopub.execute_input":"2024-06-18T10:54:58.481969Z","iopub.status.idle":"2024-06-18T10:54:58.487989Z","shell.execute_reply.started":"2024-06-18T10:54:58.481926Z","shell.execute_reply":"2024-06-18T10:54:58.487043Z"},"trusted":true},"execution_count":41,"outputs":[{"name":"stdout","text":"\nval_accuracy: 93.83%\n","output_type":"stream"}]},{"cell_type":"code","source":"val_accuracy = np.mean(history.history['val_accuracy'])\nprint(\"\\n%s: %.2f%%\" % ('val_accuracy', np.mean(history.history['val_accuracy'])*100))","metadata":{"execution":{"iopub.status.busy":"2024-06-18T10:55:01.752961Z","iopub.execute_input":"2024-06-18T10:55:01.753931Z","iopub.status.idle":"2024-06-18T10:55:01.759016Z","shell.execute_reply.started":"2024-06-18T10:55:01.753897Z","shell.execute_reply":"2024-06-18T10:55:01.757952Z"},"trusted":true},"execution_count":42,"outputs":[{"name":"stdout","text":"\nval_accuracy: 93.17%\n","output_type":"stream"}]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\nplt.plot(history.history['accuracy'])\nplt.plot(history.history['val_accuracy'])\nplt.legend((\"accuracy\",\"val_accuracy\"))\nplt.xlabel('Epoch')\nplt.ylabel('Accuracy')","metadata":{"execution":{"iopub.status.busy":"2024-06-18T10:55:03.402439Z","iopub.execute_input":"2024-06-18T10:55:03.402852Z","iopub.status.idle":"2024-06-18T10:55:03.686969Z","shell.execute_reply.started":"2024-06-18T10:55:03.402810Z","shell.execute_reply":"2024-06-18T10:55:03.686045Z"},"trusted":true},"execution_count":43,"outputs":[{"execution_count":43,"output_type":"execute_result","data":{"text/plain":"Text(0, 0.5, 'Accuracy')"},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"<Figure size 640x480 with 1 Axes>","image/png":"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8tm2JrYAtSKtVosjR44gISHBeEwqlSIhIQEHDhww+54DBw6YlAeAxMREi+UdVUlJCQDAz8+v0XLl5eWIjIxEREQExo4di5MnT9qietftzJkzCAsLQ7du3TBlyhRkZmZaLNtRPlNA/De9efNmPProo41uDNxeP9f6MjIykJuba/LZeXt7Iz4+3uJn15K/eUdVUlICiUQCHx+fRstZ87fgaPbs2YOgoCDExsZizpw5KCoqsli2o3y2eXl52L59O2bOnNlk2fb82bYEA1ArKiwshE6nQ3BwsMnx4OBg5Obmmn1Pbm6uVeUdkV6vx/z583HzzTejT58+FsvFxsZi/fr1+M9//oPNmzdDr9fjpptuwuXLl21YW+vFx8dj48aN2LFjBz744ANkZGTglltuQVlZmdnyHeEzNdi2bRuKi4sxffp0i2Xa6+d6LcPnY81n15K/eUdUVVWF559/HpMnT250o0xr/xYcyciRI/Hpp58iOTkZr732Gn755ReMGjUKOp3ObPmO8tlu2rQJnp6euO+++xot154/25bibvB03ebOnYsTJ0402V88dOhQDB061Pj8pptuQs+ePfHRRx/hpZdeautqttioUaOMj/v164f4+HhERkbiq6++atb/VbVn69atw6hRoxAWFmaxTHv9XElUXV2NBx54AIIg4IMPPmi0bHv+W5g0aZLxcd++fdGvXz9ERUVhz549GDFihB1r1rbWr1+PKVOmNDkxoT1/ti3FFqBWFBAQAJlMhry8PJPjeXl5CAkJMfuekJAQq8o7mnnz5uG///0vdu/ejU6dOln1XldXVwwYMABnz55to9q1DR8fH3Tv3t1ivdv7Z2pw8eJF7Nq1C7NmzbLqfe31czV8PtZ8di35m3ckhvBz8eJF7Ny5s9HWH3Oa+ltwZN26dUNAQIDFurf3zxYAfvvtN6Snp1v9Nwy078+2uRiAWpFcLsfAgQORnJxsPKbX65GcnGzyf8j1DR061KQ8AOzcudNieUchCALmzZuH7777Dj///DO6du1q9Tl0Oh3++usvhIaGtkEN2055eTnOnTtnsd7t9TO91oYNGxAUFIS7777bqve118+1a9euCAkJMfnsSktLcejQIYufXUv+5h2FIfycOXMGu3btgr+/v9XnaOpvwZFdvnwZRUVFFuvenj9bg3Xr1mHgwIGIi4uz+r3t+bNtNnuPwu5otmzZIigUCmHjxo3CqVOnhMcff1zw8fERcnNzBUEQhEceeURYuHChsfy+ffsEFxcX4V//+peQmpoqLFu2THB1dRX++usve11Cs8yZM0fw9vYW9uzZI+Tk5BhvFRUVxjLXXuuKFSuEH3/8UTh37pxw5MgRYdKkSYJSqRROnjxpj0totr///e/Cnj17hIyMDGHfvn1CQkKCEBAQIOTn5wuC0HE+0/p0Op3QuXNn4fnnn2/wWnv+XMvKyoSjR48KR48eFQAIq1atEo4ePWqc+fTqq68KPj4+wn/+8x/hzz//FMaOHSt07dpVqKysNJ5j+PDhwrvvvmt83tTfvL00dq1arVa49957hU6dOgnHjh0z+RvWaDTGc1x7rU39LdhTY9dbVlYmPPvss8KBAweEjIwMYdeuXcINN9wgxMTECFVVVcZzdITP1qCkpERwc3MTPvjgA7PnaE+fbVthAGoD7777rtC5c2dBLpcLQ4YMEQ4ePGh87bbbbhOmTZtmUv6rr74SunfvLsjlcqF3797C9u3bbVxj6wEwe9uwYYOxzLXXOn/+fOPvJTg4WBg9erSQkpJi+8pb6cEHHxRCQ0MFuVwuhIeHCw8++KBw9uxZ4+sd5TOt78cffxQACOnp6Q1ea8+f6+7du83+uzVcj16vF5YsWSIEBwcLCoVCGDFiRIPfQWRkpLBs2TKTY439zdtLY9eakZFh8W949+7dxnNce61N/S3YU2PXW1FRIdx1111CYGCg4OrqKkRGRgqPPfZYgyDTET5bg48++khQqVRCcXGx2XO0p8+2rUgEQRDatImJiIiIyMFwDBARERE5HQYgIiIicjoMQEREROR0GICIiIjI6TAAERERkdNhACIiIiKnwwBERERETocBiIiIiJwOAxARUTNIJBJs27bN3tUgolbCAEREDm/69OmQSCQNbiNHjrR31YionXKxdwWIiJpj5MiR2LBhg8kxhUJhp9oQUXvHFiAiahcUCgVCQkJMbr6+vgDE7qkPPvgAo0aNgkqlQrdu3fDNN9+YvP+vv/7C8OHDoVKp4O/vj8cffxzl5eUmZdavX4/evXtDoVAgNDQU8+bNM3m9sLAQ48ePh5ubG2JiYvD999+37UUTUZthACKiDmHJkiWYMGECjh8/jilTpmDSpElITU0FAKjVaiQmJsLX1xe///47vv76a+zatcsk4HzwwQeYO3cuHn/8cfz111/4/vvvER0dbfIzVqxYgQceeAB//vknRo8ejSlTpuDKlSs2vU4iaiX23o6eiKgp06ZNE2QymeDu7m5yW7lypSAIggBAmD17tsl74uPjhTlz5giCIAgff/yx4OvrK5SXlxtf3759uyCVSoXc3FxBEAQhLCxMePHFFy3WAYCwePFi4/Py8nIBgPC///2v1a6TiGyHY4CIqF2444478MEHH5gc8/PzMz4eOnSoyWtDhw7FsWPHAACpqamIi4uDu7u78fWbb74Zer0e6enpkEgkyM7OxogRIxqtQ79+/YyP3d3d4eXlhfz8/JZeEhHZEQMQEbUL7u7uDbqkWotKpWpWOVdXV5PnEokEer2+LapERG2MY4CIqEM4ePBgg+c9e/YEAPTs2RPHjx+HWq02vr5v3z5IpVLExsbC09MTXbp0QXJysk3rTET2wxYgImoXNBoNcnNzTY65uLggICAAAPD1119j0KBBGDZsGD7//HMcPnwY69atAwBMmTIFy5Ytw7Rp07B8+XIUFBTgySefxCOPPILg4GAAwPLlyzF79mwEBQVh1KhRKCsrw759+/Dkk0/a9kKJyCYYgIioXdixYwdCQ0NNjsXGxiItLQ2AOENry5Yt+Nvf/obQ0FB8+eWX6NWrFwDAzc0NP/74I55++mkMHjwYbm5umDBhAlatWmU817Rp01BVVYW33noLzz77LAICAnD//ffb7gKJyKYkgiAI9q4EEdH1kEgk+O677zBu3Dh7V4WI2gmOASIiIiKnwwBERERETodjgIio3WNPPhFZiy1ARERE5HQYgIiIiMjpMAARERGR02EAIiIiIqfDAEREREROhwGIiIiInA4DEBERETkdBiAiIiJyOv8P6XEQK7MdsZoAAAAASUVORK5CYII="},"metadata":{}}]},{"cell_type":"code","source":"%%capture\n!pip install tf2onnx onnxruntime","metadata":{"execution":{"iopub.status.busy":"2024-06-10T12:07:05.365761Z","iopub.execute_input":"2024-06-10T12:07:05.366636Z","iopub.status.idle":"2024-06-10T12:07:17.932092Z","shell.execute_reply.started":"2024-06-10T12:07:05.366601Z","shell.execute_reply":"2024-06-10T12:07:17.930647Z"},"trusted":true},"execution_count":56,"outputs":[]},{"cell_type":"code","source":"import keras\nimport numpy as np\nimport tf2onnx\nimport onnx","metadata":{"execution":{"iopub.status.busy":"2024-06-10T12:07:17.934508Z","iopub.execute_input":"2024-06-10T12:07:17.934930Z","iopub.status.idle":"2024-06-10T12:07:17.940166Z","shell.execute_reply.started":"2024-06-10T12:07:17.934883Z","shell.execute_reply":"2024-06-10T12:07:17.939232Z"},"trusted":true},"execution_count":57,"outputs":[]},{"cell_type":"code","source":"input_shape=(X_train.shape[1], 1)\ninput_shape","metadata":{"execution":{"iopub.status.busy":"2024-06-10T16:32:19.985274Z","iopub.execute_input":"2024-06-10T16:32:19.985908Z","iopub.status.idle":"2024-06-10T16:32:19.992147Z","shell.execute_reply.started":"2024-06-10T16:32:19.985874Z","shell.execute_reply":"2024-06-10T16:32:19.991220Z"},"trusted":true},"execution_count":69,"outputs":[{"execution_count":69,"output_type":"execute_result","data":{"text/plain":"(40, 1)"},"metadata":{}}]},{"cell_type":"code","source":"input_signature = [tf.TensorSpec([1, 40], tf.float32, name='x')]\nlstm_model.output_names = [\"output_names\"]\nonnx_model, _ = tf2onnx.convert.from_keras(lstm_model, input_signature, opset=13)\nonnx.save(onnx_model, \"lstm_model_r.onnx\")","metadata":{"execution":{"iopub.status.busy":"2024-06-10T12:11:40.550468Z","iopub.execute_input":"2024-06-10T12:11:40.550837Z","iopub.status.idle":"2024-06-10T12:11:44.890285Z","shell.execute_reply.started":"2024-06-10T12:11:40.550808Z","shell.execute_reply":"2024-06-10T12:11:44.889410Z"},"trusted":true},"execution_count":64,"outputs":[]},{"cell_type":"code","source":"lstm_model.save('lstm_model_r.h5')\nlstm_model.save('lstm_model_r.keras')","metadata":{"execution":{"iopub.status.busy":"2024-06-10T12:26:01.965777Z","iopub.execute_input":"2024-06-10T12:26:01.966051Z","iopub.status.idle":"2024-06-10T12:26:02.626283Z","shell.execute_reply.started":"2024-06-10T12:26:01.966026Z","shell.execute_reply":"2024-06-10T12:26:02.625431Z"},"trusted":true},"execution_count":67,"outputs":[]},{"cell_type":"code","source":"m =pd.DataFrame(lstm_model.predict(X_valid)).T.idxmax()\nfrom sklearn.metrics import classification_report\nprint(classification_report(y_valid, m))","metadata":{"execution":{"iopub.status.busy":"2024-06-18T10:55:18.674684Z","iopub.execute_input":"2024-06-18T10:55:18.675085Z","iopub.status.idle":"2024-06-18T10:55:24.263516Z","shell.execute_reply.started":"2024-06-18T10:55:18.675047Z","shell.execute_reply":"2024-06-18T10:55:24.262427Z"},"trusted":true},"execution_count":44,"outputs":[{"name":"stdout","text":"\u001b[1m505/505\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 10ms/step\n              precision    recall  f1-score   support\n\n           0       0.93      0.86      0.89      2710\n           1       0.96      0.96      0.96      2569\n           2       0.97      0.98      0.98      2749\n           3       0.97      0.98      0.98      2713\n           4       0.93      0.96      0.95      2711\n           5       0.98      0.99      0.99      2685\n\n    accuracy                           0.96     16137\n   macro avg       0.96      0.96      0.96     16137\nweighted avg       0.96      0.96      0.96     16137\n\n","output_type":"stream"}]},{"cell_type":"code","source":"accuracy_score(y_valid, m)","metadata":{"execution":{"iopub.status.busy":"2024-06-18T10:55:24.265112Z","iopub.execute_input":"2024-06-18T10:55:24.265384Z","iopub.status.idle":"2024-06-18T10:55:24.273957Z","shell.execute_reply.started":"2024-06-18T10:55:24.265360Z","shell.execute_reply":"2024-06-18T10:55:24.273082Z"},"trusted":true},"execution_count":45,"outputs":[{"execution_count":45,"output_type":"execute_result","data":{"text/plain":"0.9575509698209085"},"metadata":{}}]},{"cell_type":"code","source":"m =pd.DataFrame(lstm_model.predict(df_test[list_corr_rhythm_2[:-1]])).T.idxmax()\nfrom sklearn.metrics import classification_report\nprint(classification_report(df_test['rhythm'], m))\n","metadata":{"execution":{"iopub.status.busy":"2024-06-18T10:55:24.275114Z","iopub.execute_input":"2024-06-18T10:55:24.275442Z","iopub.status.idle":"2024-06-18T10:55:37.655900Z","shell.execute_reply.started":"2024-06-18T10:55:24.275406Z","shell.execute_reply":"2024-06-18T10:55:37.654796Z"},"trusted":true},"execution_count":46,"outputs":[{"name":"stdout","text":"\u001b[1m1317/1317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 9ms/step\n              precision    recall  f1-score   support\n\n           0       0.98      0.93      0.95     26890\n           1       0.92      0.93      0.93      4418\n           2       0.85      0.96      0.90      3577\n           3       0.79      0.94      0.86      1136\n           4       0.87      0.93      0.90      5419\n           5       0.79      0.90      0.84       692\n\n    accuracy                           0.93     42132\n   macro avg       0.87      0.93      0.90     42132\nweighted avg       0.94      0.93      0.93     42132\n\n","output_type":"stream"}]}]}